<?php

/**
 * 用户认证接口的抽象类
 * User: hjc19850430@gmail.com
 * Date: 2016/10/31
 * Time: 20:23
 */
abstract class UserOauthBaseInterf
{
    const EMPTY_USER_DATA = 10001; //用户数据不能为空
    const ADD_USER_FAILED = 10002; //添加用户基础数据失败
    const ADD_WECHAT_USER_FAILED = 10003; //添加微信用户记录失败
    const ADD_SUCCESS = 200;              //操作成功

    /**
     * 访问接口的抽象方法
     * @return mixed
     */
    abstract protected function callOauthIntf();

    /**
     * 访问接口的回调方法
     * @param mixed $callRes    请求产生的结果是数组或者是JSON串
     * @return boolen 返回的结果
     */
    abstract protected function doCallBack($callRes);

    
    /**
     * 添加用户数据
     * @param type $addData
     */
    protected function addUser($addData)
    {
        if (!$addData) {
            return array('err_code'=>self::EMPTY_USER_DATA, 'err_msg'=>'用户数据不能为空');
        }

        $userModel = D('User');

        //判断用户是否存在
        $where = array(
            'real_name' => $addData['real_name'],
            'number' => $addData['number'],
            'account_id' => $addData['account_id']
        );
        $userId = $userModel->where($where)->getField('user_id');

        if ($userId) {  //如果用户已经存在就做更新操作
            $addRes = $userModel->where(array('user_id'=>$userId))->save($addData);
        } else {    //添加用户数据
            $addRes = $userModel->add($addData);
            $userId = $addRes;
        }
        if (!$addRes) { //添加用户基础数据失败
            return array('err_code'=> self::ADD_USER_FAILED, 'err_msg'=>'添加用户基础数据失败');
        }

        //更新微信用户数据
        $mWechatUser = D('Wechat/WechatUser');
        $condition = array (
            'user_id' => $userId,
            'wechat_user_id' => session('wechatUserId'),
        );
        $res = $mWechatUser->update($condition);
        
        if ($res !== false) {
            session('userId', $userId);
            return array('err_code'=> self::ADD_SUCCESS,'err_msg'=>'添加用户信息成功');
        } else {
            return array('err_code'=> self::ADD_WECHAT_USER_FAILED,'err_msg'=>'添加微信用户失败！');
        }
    }

    
    /**
     * 魔术方法设置属性
     * @param string $name
     * @param string $value
     */
    protected function __set($name,$value)
    {
        $this->$name = $value;
    }
    
    /**
     * 魔术方法获得属性
     * @param string $name 属性名称
     * @return string 获得属性值
     */
    protected function __get($name)
    {
        return $this->$name;
    }
}
